Bug 551722 – gtk_widget_set_scroll_adjustments() should check the signal
authorMatthias Clasen <mclasen@redhat.com>
Wed, 17 Sep 2008 15:07:32 +0000 (15:07 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 17 Sep 2008 15:07:32 +0000 (15:07 +0000)
2008-09-17  Matthias Clasen  <mclasen@redhat.com>

        Bug 551722 – gtk_widget_set_scroll_adjustments() should check the
        signal signature

        * gtk/gtkwidget.c (gtk_widget_set_scroll_adjustments): Check the
        signature of the signal. Patch by Christian Persch

svn path=/trunk/; revision=21410

ChangeLog
gtk/gtkwidget.c

index 1b30e718376f4d772f2801a46dbd6827915beb13..df5e62006868c60e632288d14babb4e5ba9d8a25 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-09-17  Matthias Clasen  <mclasen@redhat.com>
+
+       Bug 551722 – gtk_widget_set_scroll_adjustments() should check the
+       signal signature
+
+       * gtk/gtkwidget.c (gtk_widget_set_scroll_adjustments): Check the
+       signature of the signal. Patch by Christian Persch
+
 2008-09-16  Michael Natterer  <mitch@imendio.com>
 
        * gtk/gtkwidget.c (_gtk_widget_set,get_pointer_window): don't
index bbb2bd6942d1a395d64f919fedef2bab66cfb0ed..825ef85d5a39565958233a3370e687dfd2590968 100644 (file)
@@ -4800,22 +4800,35 @@ gtk_widget_set_scroll_adjustments (GtkWidget     *widget,
                                   GtkAdjustment *hadjustment,
                                   GtkAdjustment *vadjustment)
 {
+  guint signal_id;
+  GSignalQuery query;
+
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
   if (hadjustment)
     g_return_val_if_fail (GTK_IS_ADJUSTMENT (hadjustment), FALSE);
   if (vadjustment)
     g_return_val_if_fail (GTK_IS_ADJUSTMENT (vadjustment), FALSE);
 
-  if (WIDGET_CLASS (widget)->set_scroll_adjustments_signal)
+  signal_id = WIDGET_CLASS (widget)->set_scroll_adjustments_signal;
+  if (!signal_id)
+    return FALSE;
+
+  g_signal_query (signal_id, &query);
+  if (!query.signal_id ||
+      !g_type_is_a (query.itype, GTK_TYPE_WIDGET) ||
+      query.return_type != G_TYPE_NONE ||
+      query.n_params != 2 ||
+      query.param_types[0] != GTK_TYPE_ADJUSTMENT ||
+      query.param_types[1] != GTK_TYPE_ADJUSTMENT)
     {
-      /* FIXME: we should eventually check the signals signature here */
-      g_signal_emit (widget,
-                    WIDGET_CLASS (widget)->set_scroll_adjustments_signal, 0,
-                    hadjustment, vadjustment);
-      return TRUE;
+      g_warning (G_STRLOC ": signal \"%s::%s\" has wrong signature",
+                G_OBJECT_TYPE_NAME (widget), query.signal_name);
+      return FALSE;
     }
-  else
-    return FALSE;
+      
+  g_signal_emit (widget, signal_id, 0, hadjustment, vadjustment);
+  return TRUE;
 }
 
 static void